A “bus” is a collection of signals interconnecting two or more electrical devices that permits one device to transmit information to one or more other devices. There are many different types of busses used in computers and computer-related products. Examples include the Peripheral Component Interconnect (“PCI”) bus, the Industry Standard Architecture (“ISA”) bus and the Universal Serial Bus (“USB”), to name a few. Bus operation is usually defined by a standard that specifies various concerns such as the electrical characteristics of the bus, how data is to be transmitted over the bus, how requests for data are acknowledged, and the like. Using a bus to perform an activity, such as transmitting data, requesting data, etc., is generally called running a “cycle.” Standardizing a bus protocol helps to ensure effective communication between devices connected to the bus, even if such devices are made by different manufacturers. Any company wishing to make and sell a device to be used on a particular bus, provides that device with an interface unique to the bus to which the device will connect. Designing a device to particular bus standard ensures that device will be able to communicate properly with all other devices connected to the same bus, even if such other devices are made by different manufacturers.
Thus, for example, an internal fax/modem (i.e., internal to a personal computer) designed for operation on a PCI bus will be able to transmit and receive data to and from other devices on the PCI bus, even if each device on the PCI bus is made by a different manufacturer.
According to most bus protocols, a device that needs to run a cycle on the bus must first gain control of the bus. Once the sending device has control of the bus, that device then can run its desired cycle, which may entail transmitting data to a receiving bus device. Often, more than one bus device may concurrently need to initiate a cycle on the bus. Bus protocols in which multiple devices may request control of the bus to run cycles usually implement some form of “arbitration” to efficiently decide which device to grant control of the bus among multiple devices requesting control. The prior art is replete with many types of arbitration schemes.
Currently, there is a market push to incorporate various types of consumer electronic equipment with a bus interface that permits such equipment to be connected to other equipment with a corresponding bus interface. For example, digital cameras, digital video recorders, digital video disks (“DVDs”), printers are becoming available with an IEEE 1394 bus interface. The IEEE (“Institute of Electrical and Electronics Engineers”) 1394 serial interface (and all its variations, referred to collectively herein as “1394”) describes a bus that permits a digital camera to be connected to a printer or computer so that an image acquired by the camera can be printed on the printer or stored electronically in the computer. Further, digital televisions can be coupled to a computer or computer network via an IEEE 1394 bus.
Asynchronous stream packets are a form of packet incorporated in 1394 to circumvent older link design packet-filtering limitations. Asynchronous stream packets are like isochronous packets, in that they share tcode “A,” and the channel number is allocated in the usual way from the CHANNELS_AVAILABLE register of the isochronous resource manager.
However, asynchronous stream packets are transmitted during an asynchronous period, and are subject to the same arbitration requirements as other asynchronous packets (i.e. fairness). Like isochronous packets, there is no ack generated in response. Thus they behave like broadcast packets.
Existing links filter asynchronous stream packets out successfully in hardware. This is not the case for true broadcast packets, which have a destination ID of 63. Broadcast packets are passed upwards for software to filter, which causes overflows in some implementations.
Asynchronous streams are heavily used for internet protocol over 1394-compliant systems; on some 1394 systems, a sizable portion of the packets sent could be asynchronous stream packets. Because they are asynchronous packets, without following acknowledge packets, the bus is forced to wait for a full subaction gap before arbitration can begin for the next packet. This effectively drops bus efficiency back to pre-1394a-2000 levels. Ack acceleration, fly-by concatenations, link concatenations are all precluded by an asynchronous stream packet. After an asynchronous stream packet is transmitted on the bus, all nodes connected to the bus must wait for at least a subaction gap time period to pass before beginning bus arbitration.